home *** CD-ROM | disk | FTP | other *** search
- package javax.swing.tree;
-
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Container;
- import java.awt.Font;
- import java.awt.Rectangle;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.MouseEvent;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
- import java.util.EventObject;
- import java.util.Vector;
- import javax.swing.DefaultCellEditor;
- import javax.swing.Icon;
- import javax.swing.JTree;
- import javax.swing.SwingUtilities;
- import javax.swing.Timer;
- import javax.swing.UIManager;
- import javax.swing.border.Border;
- import javax.swing.event.CellEditorListener;
- import javax.swing.event.TreeSelectionEvent;
- import javax.swing.event.TreeSelectionListener;
-
- public class DefaultTreeCellEditor implements ActionListener, TreeCellEditor, TreeSelectionListener {
- protected TreeCellEditor realEditor;
- protected DefaultTreeCellRenderer renderer;
- protected Container editingContainer;
- protected transient Component editingComponent;
- protected boolean canEdit;
- protected transient int offset;
- protected transient JTree tree;
- protected transient TreePath lastPath;
- protected transient Timer timer;
- protected transient int lastRow;
- protected Color borderSelectionColor;
- protected transient Icon editingIcon;
- protected Font font;
-
- public DefaultTreeCellEditor(JTree var1, DefaultTreeCellRenderer var2) {
- this(var1, var2, (TreeCellEditor)null);
- }
-
- public DefaultTreeCellEditor(JTree var1, DefaultTreeCellRenderer var2, TreeCellEditor var3) {
- this.renderer = var2;
- this.realEditor = var3;
- if (this.realEditor == null) {
- this.realEditor = this.createTreeCellEditor();
- }
-
- this.editingContainer = this.createContainer();
- this.setTree(var1);
- this.setBorderSelectionColor(UIManager.getColor("Tree.editorBorderSelectionColor"));
- }
-
- public void actionPerformed(ActionEvent var1) {
- if (this.tree != null && this.lastPath != null) {
- this.tree.startEditingAtPath(this.lastPath);
- }
-
- }
-
- public void addCellEditorListener(CellEditorListener var1) {
- this.realEditor.addCellEditorListener(var1);
- }
-
- protected boolean canEditImmediately(EventObject var1) {
- if (var1 instanceof MouseEvent && SwingUtilities.isLeftMouseButton((MouseEvent)var1)) {
- MouseEvent var2 = (MouseEvent)var1;
- return var2.getClickCount() > 2 && this.inHitRegion(var2.getX(), var2.getY());
- } else {
- return var1 == null;
- }
- }
-
- public void cancelCellEditing() {
- this.realEditor.cancelCellEditing();
- if (this.editingComponent != null) {
- this.editingContainer.remove(this.editingComponent);
- }
-
- this.editingComponent = null;
- }
-
- protected Container createContainer() {
- return new EditorContainer(this);
- }
-
- protected TreeCellEditor createTreeCellEditor() {
- Border var1 = UIManager.getBorder("Tree.editorBorder");
- 1 var2 = new 1(new DefaultTextField(this, var1));
- ((DefaultCellEditor)var2).setClickCountToStart(1);
- return var2;
- }
-
- protected void determineOffset(JTree var1, Object var2, boolean var3, boolean var4, boolean var5, int var6) {
- if (this.renderer != null) {
- if (var5) {
- this.editingIcon = this.renderer.getLeafIcon();
- } else if (var4) {
- this.editingIcon = this.renderer.getOpenIcon();
- } else {
- this.editingIcon = this.renderer.getClosedIcon();
- }
-
- if (this.editingIcon != null) {
- this.offset = this.renderer.getIconTextGap() + this.editingIcon.getIconWidth();
- } else {
- this.offset = this.renderer.getIconTextGap();
- }
- } else {
- this.editingIcon = null;
- this.offset = 0;
- }
-
- }
-
- public Color getBorderSelectionColor() {
- return this.borderSelectionColor;
- }
-
- public Object getCellEditorValue() {
- return this.realEditor.getCellEditorValue();
- }
-
- public Font getFont() {
- return this.font;
- }
-
- public Component getTreeCellEditorComponent(JTree var1, Object var2, boolean var3, boolean var4, boolean var5, int var6) {
- this.setTree(var1);
- this.lastRow = var6;
- this.determineOffset(var1, var2, var3, var4, var5, var6);
- this.editingComponent = this.realEditor.getTreeCellEditorComponent(var1, var2, var3, var4, var5, var6);
- TreePath var7 = var1.getPathForRow(var6);
- this.canEdit = this.lastPath != null && var7 != null && this.lastPath.equals(var7);
- Font var8 = this.getFont();
- if (var8 == null) {
- if (this.renderer != null) {
- var8 = this.renderer.getFont();
- }
-
- if (var8 == null) {
- var8 = ((Component)var1).getFont();
- }
- }
-
- this.editingContainer.setFont(var8);
- return this.editingContainer;
- }
-
- protected boolean inHitRegion(int var1, int var2) {
- if (this.lastRow != -1 && this.tree != null) {
- Rectangle var3 = this.tree.getRowBounds(this.lastRow);
- if (var3 != null && var1 <= var3.x + this.offset && this.offset < var3.width - 5) {
- return false;
- }
- }
-
- return true;
- }
-
- public boolean isCellEditable(EventObject var1) {
- boolean var2 = false;
- if (!this.realEditor.isCellEditable(var1)) {
- return false;
- } else {
- if (this.canEditImmediately(var1)) {
- var2 = true;
- } else if (this.canEdit && this.shouldStartEditingTimer(var1)) {
- this.startEditingTimer();
- } else if (this.timer != null && this.timer.isRunning()) {
- this.timer.stop();
- }
-
- if (var2) {
- this.prepareForEditing();
- }
-
- return var2;
- }
- }
-
- protected void prepareForEditing() {
- this.editingContainer.add(this.editingComponent);
- }
-
- private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
- var1.defaultReadObject();
- Vector var2 = (Vector)var1.readObject();
- int var3 = 0;
- int var4 = var2.size();
- if (var3 < var4 && var2.elementAt(var3).equals("realEditor")) {
- ++var3;
- this.realEditor = (TreeCellEditor)var2.elementAt(var3);
- ++var3;
- }
-
- }
-
- public void removeCellEditorListener(CellEditorListener var1) {
- this.realEditor.removeCellEditorListener(var1);
- }
-
- public void setBorderSelectionColor(Color var1) {
- this.borderSelectionColor = var1;
- }
-
- public void setFont(Font var1) {
- this.font = var1;
- }
-
- protected void setTree(JTree var1) {
- if (this.tree != var1) {
- if (this.tree != null) {
- this.tree.removeTreeSelectionListener(this);
- }
-
- this.tree = var1;
- if (this.tree != null) {
- this.tree.addTreeSelectionListener(this);
- }
-
- if (this.timer != null) {
- this.timer.stop();
- }
- }
-
- }
-
- public boolean shouldSelectCell(EventObject var1) {
- return this.realEditor.shouldSelectCell(var1);
- }
-
- protected boolean shouldStartEditingTimer(EventObject var1) {
- if (var1 instanceof MouseEvent && SwingUtilities.isLeftMouseButton((MouseEvent)var1)) {
- MouseEvent var2 = (MouseEvent)var1;
- return var2.getClickCount() == 1 && this.inHitRegion(var2.getX(), var2.getY());
- } else {
- return false;
- }
- }
-
- protected void startEditingTimer() {
- if (this.timer == null) {
- this.timer = new Timer(1200, this);
- this.timer.setRepeats(false);
- }
-
- this.timer.start();
- }
-
- public boolean stopCellEditing() {
- if (this.realEditor.stopCellEditing()) {
- if (this.editingComponent != null) {
- this.editingContainer.remove(this.editingComponent);
- }
-
- this.editingComponent = null;
- return true;
- } else {
- return false;
- }
- }
-
- public void valueChanged(TreeSelectionEvent var1) {
- if (this.tree != null) {
- if (this.tree.getSelectionCount() == 1) {
- this.lastPath = this.tree.getSelectionPath();
- } else {
- this.lastPath = null;
- }
- }
-
- if (this.timer != null) {
- this.timer.stop();
- }
-
- }
-
- private void writeObject(ObjectOutputStream var1) throws IOException {
- Vector var2 = new Vector();
- var1.defaultWriteObject();
- if (this.realEditor != null && this.realEditor instanceof Serializable) {
- var2.addElement("realEditor");
- var2.addElement(this.realEditor);
- }
-
- var1.writeObject(var2);
- }
- }
-